iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

準備一個標準的範例,這章要說key存在的意義,

import React, { useState } from "react";
import "./app5.scss";

export default function App3() {
  const [goitem, goItem] = useState([
    { id: 1, value: 1 },
    { id: 2, value: 2 },
    { id: 3, value: 3 }
  ]);

  const additem = () => {
    goItem([
      { id: 4, value: 4 },
      { id: 1, value: 1 },
      { id: 2, value: 2 },
      { id: 3, value: 3 }
    ]);
  };

  return (
    <div className="div_bg">
      <button onClick={additem}>點我</button>
      <ul>
        {goitem.map((e) => (
          <li key={e.id}>{e.value}</li>
        ))}
      </ul>
    </div>
  );
}


範例:https://codesandbox.io/s/cocky-monad-lip4i

這是一個KEY寫完整的例子,會發現新增一個數據時只有原本不存在的<li> 才會被更新
https://ithelp.ithome.com.tw/upload/images/20200914/20110292qHLrhdx5ZA.png

故意把key刪除測試

import React, { useState } from "react";
import "./app5.scss";

export default function App3() {
  const [goitem, goItem] = useState([
    { id: 1, value: 1 },
    { id: 2, value: 2 },
    { id: 3, value: 3 }
  ]);

  const additem = () => {
    goItem([
      { id: 4, value: 4 },
      { id: 1, value: 1 },
      { id: 2, value: 2 },
      { id: 3, value: 3 }
    ]);
  };

  return (
    <div className="div_bg">
      <button onClick={additem}>點我</button>
      <ul>
        {goitem.map((e) => (
          <li>{e.value}</li>
        ))}
      </ul>
    </div>
  );
}

會發現點擊後全部的<li>都被重新渲染,這樣在ui上會很不好,所以key的重要性就在這裡

範例:https://codesandbox.io/s/unruffled-dust-srnfh

https://ithelp.ithome.com.tw/upload/images/20200914/20110292p80H2tUEJz.png


上一篇
day 13 useState 做雙向綁定
下一篇
day 15 useEffect的使用
系列文
react.js 的學習筆記 (沒在用硬要學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言